270 DIM H(12),H$(12),C$(12),F$(10),T(3),CH(12),CL(12),C(12),M(12),K(10),U(12),A$(9),ASPECT$(85),ASPDEG(85),ASPMIN(85),DDEG(85),DMIN(85),CHART1(12),XK(12),DIR$(85)
1270 Y1#=Y:M1#=M:D1#=D:IF M1#=1 OR M1#=2 THEN Y1#=Y1#-1:M1#=M1#+12
1280 IF Y1#<1582 THEN B1#=0 ELSE IF Y1#=1582 AND M1#<10 THEN B1#=0 ELSE IF Y1#=1582 AND M1#=10 AND D1#<15 THEN B1#=0 ELSE A1#=INT(Y1#/100):B1#=2-A1#+INT(A1#/4)
3270 ASP=ABS(U(I)-U(J)):IF ASP>180 THEN ASP=360-ASP
3280 ASP$=STR$(CINT(ASP*100)):ASPDEG$=LEFT$(ASP$,LEN(ASP$)-2):ASPDEG=VAL(ASPDEG$):ASPMIN=CINT(60*(ASP-ASPDEG)):IF ASPMIN=60 THEN 3290 ELSE 3300
3290 ASPDEG=ASPDEG+1:ASPMIN=0
3300 FOR K=1 TO 9:D=ABS(ASP-VAL(RIGHT$(A$(K),3))):'<--- CHECK ANGLE AGAINST ASPECTS
3310 D$=STR$(CINT(D*100)):DDEG$=LEFT$(D$,LEN(D$)-2):DDEG=VAL(DDEG$):DMIN=CINT(60*(D-DDEG)):IF DMIN=60 THEN 3320 ELSE 3330
3320 DDEG=DDEG+1:DMIN=0
3330 '<--- IF WITHIN ORB, PRINT ASPECT
3340 IF D<VAL(MID$(A$(K),4,1)) THEN PRINT C$(I)" "LEFT$(A$(K),3)" "C$(J)" ";:PRINT USING "###";ASPDEG;:PRINT "d ";:PRINT USING "##";ASPMIN;:PRINT "m ";:PRINT USING "#";DDEG;:PRINT "d ";:PRINT USING "##";DMIN;:PRINT "m":LNE=LNE+1:GOSUB 3380
3350 NEXT K
3360 NEXT J:NEXT I
3365 JCI$="Internal Communication Index: ":PRINT:PRINT JCI$;CINT(COMM2)
3370 GOTO 3430
3380 ASPECT$(LNE)=C$(I)+" "+LEFT$(A$(K),3)+" "+C$(J)+" ":'<--- STORE ASPECT FOR LINE PRINTER
3440 IF YES% = 0 THEN 3490:' No print request, so exit from subroutine
3450 GOSUB 4880
3460 LPRINT " ASPECTS ANGLES ORBS"
3470 LPRINT "------------- -------- ------"
3480 FOR I=1 TO LNE:LPRINT ASPECT$(I);:LPRINT USING "###";ASPDEG(I);:LPRINT "d ";:LPRINT USING "##";ASPMIN(I);:LPRINT "m ";:LPRINT USING "#";DDEG(I);:LPRINT "d ";:LPRINT USING "##";DMIN(I);:LPRINT "m":NEXT I
3485 LPRINT:LPRINT JCI$;CINT(COMM2)
3490 RETURN
3500 '------------------------------
3510 ' Compute transits/synastry
3520 '------------------------------
3530 IF LOOPCOUNT%=0 THEN 4560
3540 PRINT:PRINT "Display aspects between the first chart and this chart? Y/N ";:GOSUB 860:PRINT
3660 ASP=ABS(U(I)-CHART1(J)):IF ASP>180 THEN ASP=360-ASP:'<--- CHECK NEW PLANETARY LONGITUDES AGAINST VALUES STORED FOR 1ST CHART
3670 ASP$=STR$(CINT(ASP*100)):ASPDEG$=LEFT$(ASP$,LEN(ASP$)-2):ASPDEG=VAL(ASPDEG$):ASPMIN=CINT(60*(ASP-ASPDEG)):IF ASPMIN=60 THEN 3680 ELSE 3690
3680 ASPDEG=ASPDEG+1:ASPMIN=0
3690 FOR K=1 TO 9:ANG=VAL(RIGHT$(A$(K),3)):D=ABS(ASP-ANG):'<--- CHECK ANGLE AGAINST ASPECTS
3700 '<--- IF WITHIN ORB, PRINT ASPECT
3710 ORB=VAL(MID$(A$(K),4,1)):IF D>ORB THEN 3960
3720 D$=STR$(CINT(D*100)):DDEG$=LEFT$(D$,LEN(D$)-2):DDEG=VAL(DDEG$):DMIN=CINT(60*(D-DDEG)):IF DMIN=60 THEN 3730 ELSE 3740
3730 DDEG=DDEG+1:DMIN=0
3740 IF TCS=1 THEN 3750 ELSE 3950
3750 U=U(I):CH=CHART1(J):'<--- ROUTINE TO TEST WHETHER TRANSIT IS APPLYING OR SEPARATING
3760 IF ANG<=90 THEN 3770 ELSE 3800
3770 IF U<90 AND CH>270 THEN U=U+360:GOTO 3860
3780 IF CH<90 AND U>270 THEN CH=CH+360:GOTO 3860
3790 GOTO 3860
3800 IF ANG>90 AND ANG<180 THEN 3810 ELSE 3840
3810 IF U>180 AND U-CH>180 THEN CH=CH+360:GOTO 3860
3820 IF CH>180 AND CH-U>180 THEN U=U+360:GOTO 3860
3830 GOTO 3860
3840 IF ANG=180 AND CH-U>180 THEN U=U+360:GOTO 3860
3850 IF ANG=180 AND U-CH>180 THEN CH=CH+360
3860 IF U<CH AND ASP>ANG AND XK(I)>0 THEN DIR$=" Applying":GOTO 3940
3870 IF U<CH AND ASP<ANG AND XK(I)>0 THEN DIR$=" Separating":GOTO 3940
3880 IF U<CH AND ASP>ANG AND XK(I)<0 THEN DIR$=" Separating":GOTO 3940
3890 IF U<CH AND ASP<ANG AND XK(I)<0 THEN DIR$=" Applying":GOTO 3940
3900 IF U>CH AND ASP>ANG AND XK(I)>0 THEN DIR$=" Separating":GOTO 3940
3910 IF U>CH AND ASP<ANG AND XK(I)>0 THEN DIR$=" Applying":GOTO 3940
3920 IF U>CH AND ASP>ANG AND XK(I)<0 THEN DIR$=" Applying":GOTO 3940
3930 IF U>CH AND ASP<ANG AND XK(I)<0 THEN DIR$=" Separating"
3940 IF DDEG=0 AND DMIN=0 THEN DIR$=" Partile"
3950 PRINT C$(I)" "LEFT$(A$(K),3)" "C$(J)" ";:PRINT USING "###";ASPDEG;:PRINT "d ";:PRINT USING "##";ASPMIN;:PRINT "m ";:PRINT USING "#";DDEG;:PRINT "d ";:PRINT USING "##";DMIN;:PRINT "m";DIR$:LNE=LNE+1:GOSUB 4010
3960 NEXT K
3970 NEXT J:NEXT I
3980 IF TCS=1 THEN 4000
3990 PRINT:PRINT "Communication Index (Harmonious): ",CINT(CI):PRINT "Communication Index (Inharmonious): ",CINT(ABS(NCI)):PRINT "Total Communication Index: ",CINT(CI+ABS(NCI)):PRINT
4000 GOTO 4450
4010 IF TCS=1 THEN 4400
4020 CN=1:OP=1:IF I=J THEN OP=-1:'<--- ASSIGN COMMUNICATION INDEX FACTORS FOR ASPECTS AND PLANETS
4030 IF I=J THEN CN=.3
4040 IF I=3 OR I=7 OR I=8 OR J=3 OR J=7 OR J=8 THEN OP=-1:'<--- THE PLANETS AND ASPECTS REFERRED TO HERE CAN BE DETERMINED BY LOOKING AT THE FIRST TWO LINES OF THE DATA BLOCK
4050 IF K=1 THEN FA1=((CN)*7):GOTO 4130
4060 IF K=2 THEN FA1=((OP)*6):GOTO 4130
4070 IF K=3 THEN FA1=3:GOTO 4130
4080 IF K=4 THEN FA1=-4:GOTO 4130
4090 IF K=5 THEN FA1=2:GOTO 4130
4100 IF K=6 OR K=7 THEN FA1=-1:GOTO 4130
4110 IF K=8 THEN FA1=-.8:GOTO 4130
4120 IF K=9 THEN FA1=1
4130 IF I=1 THEN FA2=5:GOTO 4250
4140 IF I=2 THEN FA2=5:GOTO 4250
4150 IF I=3 THEN FA2=1:GOTO 4250
4160 IF I=4 THEN FA2=4:GOTO 4250
4170 IF I=5 THEN FA2=3:GOTO 4250
4180 IF I=6 THEN FA2=2:GOTO 4250
4190 IF I=7 THEN FA2=1.5:GOTO 4250
4200 IF I=8 THEN FA2=1:GOTO 4250
4210 IF I=9 THEN FA2=1.5:GOTO 4250
4220 IF I=10 THEN FA2=1:GOTO 4250
4230 IF I=11 THEN FA2=3:GOTO 4250
4240 IF I=12 THEN FA2=1
4250 IF J=1 THEN FA3=5:GOTO 4370
4260 IF J=2 THEN FA3=5:GOTO 4370
4270 IF J=3 THEN FA3=1:GOTO 4370
4280 IF J=4 THEN FA3=4:GOTO 4370
4290 IF J=5 THEN FA3=3:GOTO 4370
4300 IF J=6 THEN FA3=2:GOTO 4370
4310 IF J=7 THEN FA3=1.5:GOTO 4370
4320 IF J=8 THEN FA3=1:GOTO 4370
4330 IF J=9 THEN FA3=1.5:GOTO 4370
4340 IF J=10 THEN FA3=1:GOTO 4370
4350 IF J=11 THEN FA3=3:GOTO 4370
4360 IF J=12 THEN FA3=1
4370 STEP1=((((ORB-D)*FA1)*FA2)*FA3):IF STEP1=>0 THEN 4380 ELSE 4390:'<--- INHARMONIOUS ASPECTS HAVE NEGATIVE VALUES
4500 FOR I=1 TO LNE:LPRINT ASPECT$(I);:LPRINT USING "###";ASPDEG(I);:LPRINT "d ";:LPRINT USING "##";ASPMIN(I);:LPRINT "m ";:LPRINT USING "#";DDEG(I);:LPRINT "d ";:LPRINT USING "##";DMIN(I);:LPRINT "m";DIR$(I)
4510 IF I=40 THEN 4520 ELSE 4530
4520 GOSUB 4870
4530 NEXT I
4540 IF TCS=1 THEN 4560
4550 LPRINT:LPRINT "Communication Index (Harmonious): ",CINT(CI):LPRINT "Communication Index (Inharmonious): ",CINT(ABS(NCI)):LPRINT "Total Communication Index: ",CINT(CI+ABS(NCI)):LPRINT